package com.zyf.chapter02.behavior.strategy.sort.file.v2;

import java.io.File;

/**
 * 将算法的具体逻辑拆分
 * 排序算法得以复用
 * <p/> 优化点：排序算法都是无状态的，所以无需每次使用都重新创建一个新对象Sorter
 * @author yifeng
 */
public class Sorter {
    private static final long GB = 1000 * 1000 * 1000;

    public void sortFile(String filePath) {
        // 省略校验逻辑
        File file = new File(filePath);
        long fileSize = file.length();
        ISortAlg sortAlg;
        // 将文件大小划分为 4 个区间，根据区间分别使用不同的算法
        if (fileSize < 6 * GB) { // [0, 6GB]
            sortAlg = new QuickSort();
        } else if (fileSize < 10 * GB) { // [6GB, 10GB]
            sortAlg = new ExternalSort();
        } else if (fileSize < 100 * GB) { // [10GB, 100GB]
            sortAlg = new ConcurrentExternalSort();
        } else { // [100GB, ~]
            sortAlg = new MapReduceSort();
        }
        sortAlg.sort(filePath);
    }
}
